Microsoft Technologies Joins (Inner, Outer, Cross) এবং Subquery গাইড ও নোট

400

Microsoft Access (এবং অন্যান্য SQL ডাটাবেস সিস্টেম) এ Joins এবং Subquery দুটি গুরুত্বপূর্ণ টেকনিক যা ডেটা এক্সট্র্যাক্ট করার সময় বিভিন্ন টেবিলের মধ্যে সম্পর্ক স্থাপন এবং জটিল প্রশ্নের উত্তর বের করার জন্য ব্যবহৃত হয়।


Joins (Inner, Outer, Cross)

Join হলো দুটি বা ততোধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করার একটি পদ্ধতি, যাতে একাধিক টেবিলের ডেটা একত্রিত করা যায়। বিভিন্ন ধরণের Joins ব্যবহার করা হয়, যার মধ্যে Inner Join, Outer Join, এবং Cross Join সবচেয়ে বেশি ব্যবহৃত।


1. Inner Join

Inner Join দুটি টেবিলের মধ্যে এমন রেকর্ডস রিটার্ন করে, যেখানে উভয় টেবিলেই একটি কমন ফিল্ডের মান মিলে। অর্থাৎ, যে রেকর্ডগুলোর মধ্যে সম্পর্ক রয়েছে, শুধুমাত্র সেই রেকর্ডগুলি রিটার্ন করা হয়।

Syntax:

SELECT Table1.Column1, Table2.Column2
FROM Table1
INNER JOIN Table2 ON Table1.CommonField = Table2.CommonField;

Example:

ধরা যাক, আমাদের দুটি টেবিল রয়েছে: Employees এবং Departments। আমরা DepartmentID এর মাধ্যমে দুটি টেবিল যোগ করতে চাই।

SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

এখানে, শুধুমাত্র সেই Employees এবং Departments এর রেকর্ডগুলি দেখাবে, যেখানে উভয় টেবিলেই DepartmentID মিলে।


2. Outer Join

Outer Join একটি টেবিলের রেকর্ডগুলো সহ আরেকটি টেবিলের সন্নিহিত রেকর্ড রিটার্ন করে। এটি তিন ধরনের হতে পারে: Left Outer Join, Right Outer Join, এবং Full Outer Join

  • Left Outer Join: প্রথম টেবিলের সমস্ত রেকর্ড রিটার্ন করে, এবং দ্বিতীয় টেবিলের সাথে মেলে এমন রেকর্ডগুলিকে যোগ করে।
  • Right Outer Join: দ্বিতীয় টেবিলের সমস্ত রেকর্ড রিটার্ন করে, এবং প্রথম টেবিলের সাথে মেলে এমন রেকর্ডগুলিকে যোগ করে।
  • Full Outer Join: উভয় টেবিলের সব রেকর্ড রিটার্ন করে, এবং যেখানে মিল না থাকে সেগুলোর জন্য NULL ভ্যালু প্রদর্শিত হয়।

Syntax:

-- Left Outer Join
SELECT Table1.Column1, Table2.Column2
FROM Table1
LEFT JOIN Table2 ON Table1.CommonField = Table2.CommonField;

-- Right Outer Join
SELECT Table1.Column1, Table2.Column2
FROM Table1
RIGHT JOIN Table2 ON Table1.CommonField = Table2.CommonField;

Example:

ধরা যাক, Employees টেবিলের কিছু রেকর্ডে DepartmentID নেই, এবং Departments টেবিলের কিছু বিভাগে কর্মী নেই। আমরা Left Outer Join ব্যবহার করে সমস্ত Employees এর তথ্য দেখাতে চাই, তার সাথে যেগুলোর Department রয়েছে:

SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

এটি সমস্ত Employees এর নাম রিটার্ন করবে, এবং তাদের DepartmentName এর তথ্য যাদের DepartmentID মিলে।


3. Cross Join

Cross Join একধরণের Cartesian Product তৈরি করে, যেখানে প্রথম টেবিলের প্রতিটি রেকর্ডের সাথে দ্বিতীয় টেবিলের প্রতিটি রেকর্ড মিলে যায়। এটি সাধারণত ব্যবহার করা হয় খুব কম ক্ষেত্রেই, যখন টেবিলের মধ্যে সম্পর্ক না থাকলেও প্রতিটি রেকর্ডের সব কম্বিনেশন দেখতে হয়।

Syntax:

SELECT Table1.Column1, Table2.Column2
FROM Table1
CROSS JOIN Table2;

Example:

ধরা যাক, আমাদের দুটি টেবিল রয়েছে: Colors এবং SizesColors টেবিলে 3টি রঙ এবং Sizes টেবিলে 2টি আকার রয়েছে। একটি Cross Join ব্যবহার করলে, আমরা 6টি রেকর্ড পাবো, যেখানে প্রতিটি রঙের সাথে প্রতিটি আকার যুক্ত হবে।

SELECT Colors.ColorName, Sizes.Size
FROM Colors
CROSS JOIN Sizes;

এটি সকল Color এবং Size এর কম্বিনেশন দেখাবে।


Subquery

Subquery (অথবা Nested Query) হলো একটি কোয়েরি যা আরেকটি কোয়েরির মধ্যে থাকে। এটি সাধারণত প্রধান কোয়েরির ফলাফলের উপর ভিত্তি করে কিছু ডেটা পুনরুদ্ধারের জন্য ব্যবহৃত হয়। Subquery সাধারণত WHERE, FROM, বা SELECT ক্লজে ব্যবহৃত হতে পারে।


1. Subquery in WHERE Clause

এটি একটি সাধারণ পদ্ধতি যেখানে একটি সাবকোয়েরি মূল কোয়েরির WHERE ক্লজে ব্যবহার করা হয়, যাতে কোন শর্তের ভিত্তিতে ডেটা রিটার্ন করা যায়।

Syntax:

SELECT Column1
FROM Table1
WHERE Column2 = (SELECT Column2 FROM Table2 WHERE Condition);

Example:

ধরা যাক, আমাদের Employees এবং Departments টেবিল রয়েছে। আমরা সেই সমস্ত কর্মীদের নাম জানতে চাই যারা একটি নির্দিষ্ট বিভাগের সাথে সম্পর্কিত, যেমন Sales বিভাগ।

SELECT EmployeeName
FROM Employees
WHERE DepartmentID = (SELECT DepartmentID FROM Departments WHERE DepartmentName = 'Sales');

এখানে, সাবকোয়েরি প্রথমে Sales বিভাগের DepartmentID খুঁজে বের করবে, এবং তারপর মূল কোয়েরি সেই DepartmentID এর সাথে মেলে এমন কর্মীদের নাম রিটার্ন করবে।


2. Subquery in FROM Clause

সাবকোয়েরি FROM ক্লজে ব্যবহার করা হলে এটি একটি টেবিল বা ভিউ হিসেবে কাজ করে। এই পদ্ধতিতে মূল কোয়েরি সাবকোয়েরির ফলাফলের উপর কাজ করে।

Syntax:

SELECT Column1
FROM (SELECT Column1, Column2 FROM Table2 WHERE Condition) AS SubqueryTable
WHERE SubqueryTable.Column2 = Value;

Example:

ধরা যাক, Employees এবং Departments টেবিল রয়েছে এবং আমরা একটি সাবকোয়েরি ব্যবহার করে Employee এর জন্য তাদের নির্দিষ্ট Department এর উপর ভিত্তি করে ফলাফল দেখতে চাই:

SELECT EmployeeName
FROM (SELECT EmployeeName, DepartmentID FROM Employees WHERE DepartmentID = 2) AS Subquery
WHERE Subquery.DepartmentID = 2;

এখানে, সাবকোয়েরি Employees টেবিলের থেকে DepartmentID = 2 এর রেকর্ডগুলি নিয়ে আসবে, এবং মূল কোয়েরি সেই রেকর্ডগুলির নাম রিটার্ন করবে।


3. Correlated Subquery

একটি Correlated Subquery তে সাবকোয়েরি মূল কোয়েরির প্রতিটি রেকর্ডের জন্য কার্যকর হয়। এটি সাবকোয়েরিতে মূল কোয়েরির কলাম ব্যবহার করে এবং সাবকোয়েরি মূল কোয়েরির প্রতিটি রেকর্ডের উপর ভিত্তি করে চলতে থাকে।

Syntax:

SELECT Column1
FROM Table1
WHERE Column2 = (SELECT Column2 FROM Table2 WHERE Table1.ColumnX = Table2.ColumnY);

Example:

ধরা যাক, আমরা একটি Correlated Subquery ব্যবহার করে Employees টেবিল থেকে সেই কর্মীদের নাম দেখতে চাই, যাদের Salary বেশি Department অনুযায়ী নির্ধারিত গড় বেতন থেকে।

SELECT EmployeeName
FROM Employees e
WHERE Salary > (SELECT AVG(Salary) FROM Employees WHERE DepartmentID = e.DepartmentID);

এখানে, সাবকোয়েরি প্রতিটি Employee এর জন্য গড় বেতন বের করে এবং মূল কোয়েরি সেই কর্মীদের নাম রিটার্ন করে যাদের বেতন গড় বেতনের চেয়ে বেশি।


সারাংশ

  • Joins (Inner, Outer, Cross) দুটি বা ততোধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করে এবং একত্রিত ডেটা রিটার্ন করে।
  • Inner Join শুধুমাত্র সেগুলো রেকর্ড রিটার্ন করে যেগুলোর মধ্যে সম্পর্ক রয়েছে।
  • Outer Join সকল রেকর্ড রিটার্ন করে, সম্পর্ক না থাকলে NULL মান দেখানো হয়।
  • Cross Join এক টেবিলের প্রতিটি রেকর্ডের সাথে অন্য টেবিলের প্রতিটি রেকর্ডের সমস্ত কম্বিনেশন রিটার্ন করে।
  • Subquery একটি কোয়েরি যা অন্য একটি কোয়েরির মধ্যে থাকে এবং এটি বিভিন্ন ক্লজে ব্যবহৃত হতে পারে, যেমন WHERE, FROM ক্লজে।
Content added By
Promotion

Are you sure to start over?

Loading...